package com.mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.SqlCondition;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

@TableName("user") // 可以指定自定义的表名
@Data
// 当该类extends Model的时候，@Data会报警告，意思是自动生成的equals和hashcode的方法没有调用父类,可以使用下面注解不调用来去除警告
@EqualsAndHashCode(callSuper = false)
// 继承Model是为了实现AR模式(Active Record)
public class User extends Model<User> {

    @TableId // 可以设置主键id，当然可以不叫id，比如可以叫userId 对应数据库的字段就是user_id
    private Long id;

    //@TableField("name") // 映射数据库中的字段，当和模型不匹配的时候
    // @TableField(condition = SqlCondition.EQUAL) // 用于模型查询时候字段处理的比较逻辑
    private String name;

    private Integer age;

    private String email;

    private Long managerId;

    private LocalDateTime createTime;

    /**
     * 排除非表字段的三种方式，该字段在数据库中不存在，用于组装数据并返回
     * 1、private transient String remark; 无法序列化
     * 2、private static String remark; 实例无法独有一份
     * 3、@TableField(exist=false) 表示不是数据库表字段
     */
    private static String remark;

    // 上面remark如果设置static，则要单独设置下面这个方法，Lombok不会被static变量设置get/set方法
    public static void setRemark(String s) {
        User.remark = remark;
    }
}
